NLP

A Survey of User Simulator in Task-Oriented Dialog System

Introduction

任务导向型对话系统用于帮助用户完成某个任务如查电影、找餐馆等,它一般由四个模块组成:自然语言理解模块(Natural Language Understanding, NLU)、对话状态跟踪模块(Dialog State Tracking, DST)、对话策略模块(Dialog Policy, DP)和自然语言生成模块(Natural language Generation, NLG),其中 DST 和 DP 合称为对话管理模块(Dialog Manager)

Figure 1. 用户模拟器(蓝色部分)和对话系统(红色部分)

在和用户的每轮交互过程中,对话系统利用 NLU 将用户的语句解析成为机器可理解的语义标签,并通过 DST 维护一个内部的对话状态作为整个对话历史的紧凑表示,根据此状态使用 DP 选择合适的对话动作,最后通过 NLG 将对话动作转成自然语言回复。对话系统通过和用户进行交互得到的对话数据和使用得分则可用于进行模型的强化学习训练。然而在实际中,和真实用户的交互成本昂贵,数据回流周期慢,不足以支持模型的快速迭代,因此研究者们通常会构建一个用户模拟器(User Simulator, US)作为对话系统的交互环境来进行闭环训练。有了用户模拟器产生任意多的数据,对话系统可以对状态空间和动作空间进行充分地探索以寻找最优策略。

一个效果良好的用户模拟器,我们期望它具备以下 3 个特征:

  • 有一个总体的对话目标,能够生成上下文连贯的用户动作;
  • 有足够的泛化能力,在语料中未出现的对话情形里也能生成合理的行为;
  • 可以给出定量的反馈评分用于指导模型学习优化。

The Architecture of User Simulator

典型的用户模拟器和对话系统的结构比较相似,包含以下 4 个基本组成部分:

  1. 用户目标(User Goal):用户模拟的第一步就是生成一个用户对话的目标,对话系统对此是不可知的,但它需要通过多轮对话交互来帮助用户完成该目标。一般来说,用户目标的定义和两种槽位相关: 可告知槽(informable slots)和可问询槽(requestable slots),前者形如“槽=值”是用户用于查询的约束条件,后者则是用户希望向系统问询的属性。例如:用户目标是 “inform(type=movie, genre=action, location=San Francisco, date=this weekend),request(price)”表达的是用户的目标是想要找一部本周在 San Francisco 上映的动作片,找到电影后再进一步问询电影票的价格属性。有了明确的对用户目标的建模,我们就可以保证用户的回复具有一定的任务导向,而不是闲聊。

  2. 用户模型(User Model):用户模型对应着对话系统的对话管理模块,它的任务是根据对话历史生成当前的用户动作。用户动作是预先定义好的语义标签,例如“inform, request, greet, bye”等等。用户动作的选择应当合理且多样,能够模拟出真实用户的行为。用户模型是用户模拟器的核心组成部分,在接下来的章节里我们将会详细介绍各种具体模型和方法。

  3. 误差模型(Error Model):它接在 User Model 下游,负责模拟噪声,对用户行为进行扰动以模拟真实交互环境下不确定性。简单的方式有:随机用不正确的意图替换正确的意图、随机替换为不正确的槽位、随机替换为不正确的槽值等;复杂的方式有模拟基于 ASR 或 NLU 混淆的错误。

  4. 自然语言生成(NLG):如果用户模拟器需要输出自然语言回复,就需要 NLG 模型将用户动作转换成自然语言表述。例如用户动作标签“inform(type=movie, genre=action, date=this weekend)” 进行 NLG 模块后生成自然语句“Are there any action movies to see this weekend?”。

Approach

现有的模型基本可分为两类:

  • Agenda-based:基于规则
  • Model-based:基于模型

Agenda-based

基于规则的方法需要专家手动构建,它的优点是可以冷启动,用户行为完全可控;缺点是代价大,覆盖度不够,在对话行为灵活性和多样性上比较不足,适用于话术简单清晰的填槽式对话任务。基于规则的方法中使用最为广泛的是基于议程Agenda-based的方法 [2, 3],该方法对用户状态表示、状态转移、Agenda 更新、Goal 更新进行了精细建模,逻辑清晰,可落地性强,业界很多工作 [1, 15] 都基于该方法进行扩展和优化。

基于议程的方法通过一个栈的结构把对话的议程定下来,对话的过程就变成进栈和出栈的动作,上下文关联性很强,保证了用户动作生成的一致性,一般不会出现异常用户行为。但是,该方法在对话行为灵活性和多样性比较欠缺,在实操层面可以通过引入一些随机性提升灵活度。

The Hidden Agenda User Simulation Model

Paper: _The Hidden Agenda User Simulation Model_
Link: https://ieeexplore.ieee.org/document/4806280/?arnumber=4806280

首先,作者认为人机对话可以形式化为一系列状态转换和对话行为序列。在任意时刻 $t$,用户在状态 $S$,采取动作 $a_{u}$,过渡到中间状态 $S’$,收到对话系统回复的动作$a_{m}$,然后转换到下一个状态 $S’’$,然后以此往复,循环下去。
$$
S \rightarrow a_{u} \rightarrow S^{\prime} \rightarrow a_{m} \rightarrow S^{\prime \prime} \rightarrow \ldots
$$
用户状态 S 被分为两部分表示:Agenda 的内容 A 和用户目标 G。
$$
S=(A, G) \\ G=(C, R)
$$
G 由约束条件 C 和问询内容 R 组成。在对话的过程中,G 能保证用户行为是一致的且是任务导向的。用户 Agenda 是一个类似堆栈的结构,它存储着待执行的用户对话行为(user dialogue act)。在对话开始时,使用系统数据库随机生成新的用户目标,然后会将用户目标中所有目标约束转换为告知行为(inform acts),所有的目标问询转换为问询行为(request acts)填充到用户 Agenda。在 Agenda 的底部,会添加一个 bye act 用于结束对话。

随着对话的进行,Agenda 和 Goal 会动态更新,并从 Agenda 的顶部弹出用户对话行为以形成本轮用户动作$a_{u}$。在接收到系统回复$a_{m}$后,根据写好的规则新的用户动作会被压入到 Agenda 的栈顶,不相关的用户动作会被删除。当需要考虑动作的优先级时,栈顶的用户动作也可以临时被缓存起来先执行优先级高的动作,从而为模拟器提供简单的用户记忆模型。图 2 给出了用户目标和 Agenda 变化的示例。

Figure 2: 用户状态和agenda的变化示例

Model-based

通过人工编写规则尽管落地性强,精准率高,但是成本很高,因此寻求数据驱动的模型化方法是一个很好的途径。利用对话语料进行端到端训练的效果优于基于议程的规则方法,它的优点是数据驱动,节省人力;但缺点是复杂对话建模困难,对数据数量要求很高,因此对于一些对话语料稀缺的领域效果很差。

A Sequence-to-Sequence Model for User Simulation in Spoken Dialogue Systems

Paper: A Sequence-to-Sequence Model for User Simulation in Spoken Dialogue Systems
Link: https://arxiv.org/abs/1607.00070

用户模拟器的一个重要特征是它鼓励整个对话中的连贯行为,而由于之前的概率模型从易于实现的角度,基本不考虑很长的对话历史和单句多意图的情况,导致了整个对话效率比较低下。基于此作者提出了一种 Sequence-to-sequence 的用户模拟器模型(如图 3 所示),它将对话上下文序列$\left(c_{1}, c_{2}, \dots, c_{k}\right)$作为输入,然后输出用户动作序列$\left(a_{1}, a_{2}, \dots, a_{l}\right)$。

A Sequence-to-Sequence Model for User Simulation in Spoken Dialogue Systems

Neural User Simulation for Corpus-based Policy Optimization for Spoken Dialogue Systems

Paper: Neural User Simulation for Corpus-based Policy Optimization for Spoken Dialogue Systems
Link: https://aclweb.org/anthology/papers/W/W18/W18-5007/

上一篇论文中的一些端到端系统虽然对整个对话历史都进行了跟踪,并且用户的行为是从数据中学习得到的,但是依旧存在两个问题:1)没有对用户的目标改变(goal change)进行建模;2)只在语义层面进行用户模拟,需要耗费人力标注出每轮用户语句的语义标签进行模型训练,而不是直接利用自然语句进行训练。因此该论文提出了基于 RNN 的 Neural User Simulator (NUS) 模型。首先 NUS 通过用户目标生成器,对原对话数据中的对话状态标签进行预处理,得到一个完整对话中每一轮的具体用户目标,这样就相当于对用户目标改变进行了某种程度上的建模,如下表所示:

有了每轮的用户目标,NUS 通过 RNN 来生成用户语句, 如下图所示:

Neural User Simulation for Corpus-based Policy Optimization for Spoken Dialogue Systems

Iterative Policy Learning in End-to-End Trainable Task-Oriented Neural Dialog Models

Paper: Iterative Policy Learning in End-to-End Trainable Task-Oriented Neural Dialog Models
Link: https://arxiv.org/abs/1709.06136v1

用户模型和对话管理模型功能十分接近,因此对用户模型也采用强化学习的框架,将用户模拟器和对话系统联合优化是一个可行的方向。论文在对用户模拟器和对话系统分别采用了 RNN 进行端到端的建模并使用同一个回报函数优化,两者交替训练共同最大化累计回报。

论文使用的对话系统是一个端到端的 LSTM 模型:
对话管理模型结构图

对话系统的状态由 LSTM 的隐层节点编码,每一轮都会进行更新。在第 k 轮对话,给定上一轮的系统语句 $o_{k-1}^{A}$ ,用户语句 $o_{k-1}^{U}$ ,数据库查询结果 $o_{k}^{KB}$ 作为输入,LSTM 模型更新上一轮的对话状态$s_{k-1}^{A}$ 为 $s_{k}^{A}$。新的对话状态 $s_{k}^{A}$ 通过前馈神经网络可以直接预测出本轮各个槽的跟踪分布、系统应采取的对话动作 $a_{k}^{A}$ 和一个 one-hot 编码的数据库指针 。NLG 部分作者选择采用模板的方法生成。

对应的用户模拟器的结构如下图所示。它也是采用了端到端的 LSTM 模型,输入换作了用户目标编码 $g_{k}^{U}$,上一轮用户语句 $o_{k-1}^{U}$和当前轮系统语句 $o_{k}^{A}$,模型每轮更新用户状态 $s_{k-1}^{U}$ 为 $s_{k}^{U}$ 。新的用户状态 $s_{k}^{U}$ 也通过前馈神经网络得到本轮用户应采取的动作和槽值参数。NLG 部分采用模板的方法直接生成。

用户模拟器网络结构

作者对用户模拟器和对话管理模型进行联合策略优化,使用了策略梯度(policy gradient)算法,两者各自的状态为$s_{k}^{A}$和$s_{k}^{U}$,动作为$a_{k}^{A}$和$a_{k}^{U}$。回报函数采用:

$g_{k}^{U}$是用户目标,$g_{k}^{A}$是对话系统对用户目标的估计,$D(\cdot)$ 是一个得分函数。根据相邻轮得分函数之差可以得到单轮回报函数$r_{k}$。用户模拟器和对话系统交替优化,共同最大化累计回报函数$R_{k}$。

为了降低 REINFORCE 策略梯度优化的方差,论文采用 Advantage Actor-Critic (A2C) 算法,并使用 $\varepsilon$-softmax 进行策略探索,在 DSTC2 数据集上进行了初步实验,结果如下:

User Simulation in Dialogue Systems using Inverse Reinforcement Learning

Paper: User Simulation in Dialogue Systems using Inverse Reinforcement Learning
Link: https://core.ac.uk/download/pdf/52801075.pdf

在马尔科夫决策过程 (MDP) 的框架下, 强化学习在是回报函数(reward function)给定下,找出最优策略以最大化累计反馈,而逆强化学习(Inverse reinforcement learning, IRL)就是通过给出最优策略估计出回报函数。通常最优策略会通过专家行为近似得到,例如请经验丰富的专家充当用户直接给出合理的回复。需要注意的是模仿学习(imitation learning)和 IRL 不同,模仿学习是直接通过专家行为的数据优化策略而不估计回报函数。

目前很多基于强化学习的对话管理模块中,回报函数多以是否成功和总轮数给出,不够多样真实,IRL 方法对于优化回报函数也有很大的潜力,值得研究。Guided Dialog Policy Learning Reward Estimation for Multi-Domain Task-Oriented Dialog

$\mu_{expert}$首先通过对话语料收集出真实的用户对话策略的特征期望 , 并且初始化用户模拟器的对话策略$\pi_{predict}$,通过采样得到模拟用户的特征期望$\mu_{expert}$,$\pi_{predict}$添加到对话策略集合 Π 中; 然后经过多次迭代,每次根据估计出的回报函数进一步求解出新的最优对话策略$\pi_{predict}$并添加到策略集合$\Pi$中。算法最终可以合理估计出回报函数的,该回报函数和专家策略相容$\pi_{predict}$。

论文中实验结果表明,通过对 IRL 找出来的策略集合 Π 进行加权随机采样得到的用户对话策略相比于固定的用户策略(专家行为)有更短的对话轮数和更高的 reward 值。说明了 IRL 方法在估计出回报函数的同时也能得到更加多样真实的策略,这在某些场景下将会非常有用。

Collaboration-based User Simulation for Goal-oriented Dialog Systems

Paper: Collaboration-based User Simulation for Goal-oriented Dialog Systems
Link: http://www.alborz-geramifard.com/workshops/nips17-Conversational-AI/Papers/17nipsw-cai-collaboration-based-simulator.pdf

在有高质量语料库的情况下,我们可以考虑直接根据对话上下文,从语料库中推荐出最恰当的用户语句作为用户模拟器的回复。Amazon 的论文就是根据这样的想法设计了基于协同过滤算法的用户模拟器。首先,论文论证了在客服领域,对话系统的语句表达相比于用户的表达通常比较规整单一,因此可以对所有的系统语句进行粗略的标注,如下图所示:

(a) 每个对话被转换成语义标签序列 (b) 正在进行的对话和语料库对话的匹配示意图,红橙色表示系统标签,绿色表示用户语句

系统语句被赋予了 salutation、apology 等等语义标签,这样语料库中的对话都被抽象成了一个个语义标签序列,每次进行用户语句推荐时,通过计算正在进行的对话所对应的语义标签序列和语料库中每个对话对应的语义标签序列的编辑距离进行粗筛,得到本轮用户语句回复的候选集,再对候选集中各个用户语句所在对话的上一轮系统语句的 tf-idf 特征排序进行 re-rank,从而选择最佳用户语句回复。

Guided Dialog Policy Learning: Reward Estimation for Multi-Domain Task-Oriented Dialog

Paper: Guided Dialog Policy Learning: Reward Estimation for Multi-Domain Task-Oriented Dialog
Link: https://drive.google.com/open?id=1HKiSlsSUwdt3Gwc4wrTg1ONJIKLOa7XA

作者认为传统的奖励函数的制定依赖于启发式规则,例如一种典型的奖励函数为:每一轮给定一个小的负奖励以鼓励会话尽量短,在对话结束时根据成功与否给定一个较大的正奖励或负奖励。

Unlike a handcrafted reward function that only evaluates the task success at the end of a session,
a good reward function should be able to guide the policy dynamically to complete the task during
the conversation. We refer to this as the reward sparsity issue.

本文提出了一种基于逆强化学习的奖励估计模型,通过真实的对话记录自动预测奖励,并且与对话策略同时学习。

Challenges

  1. 对话行为一致性(Coherence):对话行为要保证前后连贯,符合语境,避免出现不符合逻辑的对话行为。如何综合考虑对话上下文和 User Goal 等因素,保证用户行为序列在多轮交互过程中的一致性是一个有挑战的课题。

  2. 对话行为多样性(Diversity):模拟用户群的行为特性,需要建模这个群体的行为分布。例如某用户群是健谈的还是寡言的,是犹豫的还是果断的,各部分占比多少,这里引入用户群体画像特征,使得用户模拟器的行为更加丰富多样,贴近目标用户群体。这个方向学术界有一些研究进展,值得继续深入研究。

  3. 对话行为的泛化性(Generalization):目前来看,无论是基于规则方法还是基于模型学习的用户模拟器,在遇到语料中未曾出现的对话上下文时,表现出的泛化能力依旧比较有限。对话行为的泛化性直接体现了用户模拟器是否表现得如同真实用户一样处理更多未见的复杂的对话场景。这个方向有待学界更深入的探索。

Conclusion

用户模拟器是对话系统形成闭环训练的重要组成部分,它和对话系统结构类似,但最大的区别在于增加了用户目标的建模。好的用户模拟器不仅能够生成连贯的动作,而且还能够体现多样性和泛化能力。

Reference